(function(root,factory){
    factory(root.jQuery);
})(window,function($){
    var __DEF__ = {
        title : "",
        titleIcon : "&#x3104;",
        spreadRoot: true,
        effect:200,
        data : []
    };
    var __PROTOTYPE__ = {
        _init : function(){
            this.addClass("auth-list");
            this.code = '<p class="authitem auth1 pr" data-id="1"><span class="level1">一级</span><span class="level2">二级</span><span class="level3">权限配置细则</span></p>'+
                        '<ul class="">';
            this.code+= this._render();
            this.code+='</ul></li>';
            this.html(this.code);
        },
        _render : function(){
            var code = "";
            $.each(this.data,function(i,data){
                var _data = data;
                code+='<li class="auth-li" data-id="'+data.moduleId+'">'+
                    '<p class="authitem auth2 pr">'+
                        '<span class="btn-toggle">'+
                            '<span>'+
                                '<i class="iconfont icon-checkbox '+(data.checked?"checked":"")+'" mhref="'+data.moduleId+'" id="'+data.moduleId+'">'+(data.checked==true?"&#xe700;":data.checked=="s_true"?"&#xe749;":"&#xe748;")+'</i>'+
                            '</span>'+
                            '<span class="label-text">'+data.label+'</span>' +
                        '</span>'+
                    '</p>'+
                    '<ul class="">';
                $.each(data.children,function(j,data){
                    code+='<li>'+
                        '<p class="authitem auth3 pr" data-id="'+data.moduleId+'">'+
                            '<span class="btn-toggle">'+
                                '<span>'+
                                    '<i class="iconfont icon-checkbox '+(data.checked?"checked":"")+'" mhref="'+data.moduleId+'" phref="'+_data.moduleId+'" id="'+data.moduleId+'">'+(data.checked==true?"&#xe700;":data.checked=="s_true"?"&#xe749;":"&#xe748;")+'</i>'+
                                '</span>'+
                                '<span class="label-text">'+data.label+'</span>' +
                        '</span>'+
                        '</p>'+
                        '<ul class="auth4"><li>';
                    $.each(data.children,function(i,o){ 
                        code+='<p class="btn-toggle">'+
                                    '<span>'+
                                        '<i class="iconfont icon-checkbox '+(o.checked?"checked":"")+'" fhref="'+_data.moduleId+'" phref="'+data.moduleId+'" id="'+o.moduleId+'">'+(o.checked?"&#xe700;":"&#xe748;")+'</i>'+
                                    '</span>'+
                                    '<span class="label-text">'+o.label+'</span>' +
                            '</p>';
                    });
                    code+='</li></ul></li>';
                });
                code+='</ul></li>';
            });
            return code;
        },
        _handle : function(){
            var $this = this;
           
            this.find(".btn-toggle").on('click',function(){
               // 点击切换按钮样式
                var $chbox = $(this).find(".icon-checkbox");
                if(!$this.bubble){
                    var isChecked = $chbox.toggleClass("checked").hasClass("checked");
                    $chbox.html(isChecked?"&#xe700;":"&#xe748;");
                    if(isChecked){
                        $this.find("[phref='"+$chbox.attr('mhref')+"']").addClass('checked').html("&#xe700;");
                        $this.find("[fhref='"+$chbox.attr('mhref')+"']").addClass('checked').html("&#xe700;");
                        
                    }else{
                        $this.find("[phref='"+$chbox.attr('mhref')+"']").removeClass('checked').html("&#xe748;");
                        $this.find("[fhref='"+$chbox.attr('mhref')+"']").removeClass('checked').html("&#xe748;");
                        
                    }
                }
                // 判断子节点选中的个数给父节点添加不同的样式
                var $pch = $this.find("[mhref='"+$chbox.attr('phref')+"']");
                var $siblings = $this.find("[phref='"+$chbox.attr('phref')+"']");
                var sum = $siblings.size();
                var curr = $siblings.filter(".checked").size();
                if(sum>=curr && curr>0){
                    $pch.addClass("checked");
                    
                }else if(curr==0){
                    $pch.removeClass("checked");
                }
                if($pch.parents('li').eq(0).find('ul .icon-checkbox.checked').length === 0) {
                    $pch.html("&#xe748;");
                } else if($pch.parents('li').eq(0).find('ul .icon-checkbox').length === $pch.parents('li').eq(0).find('ul .icon-checkbox.checked').length) {
                        $pch.html("&#xe700;");
                    } else {
                        $pch.html("&#xe749;");
                }
                $this.bubble = true;
                $pch.trigger('click');
                window.setTimeout(function(){
                    $this.bubble = false;
                },200);
           });
        }
    };
    $.fn.groupRule = function(options){
        this.extend(__DEF__);
        this.extend(options);
        this.extend(__PROTOTYPE__);
        this._init();
        this._render();
        this._handle();
    }
});